Символьные вычисления
Итоговый проект: Робот-манипулятор
Робот-манипулятор, изображенный на рисунке, имеет два шарнира и два подвижных звена. Положение конечной точки манипулятора (обозначена желтым цветом) определяется четырьмя параметрами – длинами звеньев и и углами их поворота и .
Система уравнений, описывающая зависимость координат и конечной точки манипулятора от параметров , , и , имеет следующий вид:
✏️Задание 1
Создайте в Engee четыре символьные переменные , , и с использованием средств библиотеки SymPy.
Решение
using SymPy;
L1, L2, theta1, theta2 = symbols("L1 L2 theta1 theta2")
✏️Задание 2
Задайте в Engee символьные выражения для координат и конечной точки манипулятора в зависмости от параметров , , и .
Решение
x = L1*cos(theta1) + L2*cos(theta1+theta2);
display(x);
y = L1*sin(theta1) + L2*sin(theta1+theta2)
Пусть длина первого звена манипулятора м, а длина второго звена м. Подставляя эти значения в выражения для и , мы уменьшим число независимых переменных и получим зависимость координат и от двух параметров и :
✏️Задание 3
Найдите в Engee координаты конечной точки манипулятора, если длина первого звена маниуплятора м, длина второго звена м, угол поворота первого звена радиан, угол поворота второго звена радиан. Сохраните результаты в символьных переменных xpos и ypos.
Указание. Чтобы подставить в символьное выражение A вместо переменной B значение C, воспользуйтесь следующей конструкцией: A(B => C). Если необходимо выполнить несколько подстановок одновременно, то все подстановки записываются в круглых скобках через запятую: A(B => C, D => E).
Решение
xpos = x(L1 => 4, L2 => 2, theta1 => pi/8, theta2 => pi/6)
ypos = y(L1 => 4, L2 => 2, theta1 => pi/8, theta2 => pi/6)
Далее найдем углы поворота звеньев манипулятора и , если координаты конечной точки принимают следующие значения: , . Для этого составим систему уравнений
и решим ее символьными методами в Engee.
✏️Задание 4
Решите в Engee данную систему уравнений с помощью функции solve, содержащейся в библиотеке SymPy. Сохраните решение в символьных переменных sol1 и sol2.
Решение
eq1 = 2*cos(theta1+theta2) + 4*cos(theta1) ~ 3;
eq2 = 2*sin(theta1+theta2) + 4*sin(theta1) ~ 5;
sol1, sol2 = solve([eq1, eq2], [theta1, theta2])
Система имеет два решения. Оба они записаны в символьном виде, неудобном для дальнейшего использования. Поэтому преобразуем оба решения из символьного в вещественный вид с помощью функции float.
println("Первое решение")
println("theta1=", float(sol1[1]));
println("theta2=", float(sol2[1]));
println("Второе решение")
println("theta1=", float(sol1[2]));
println("theta2=", float(sol2[2]));
Мы видим, что первое решение для имеет чрезвычайно малую мнимую часть (порядка ). Это связано с ошибками округления, поэтому мнимую часть здесь необходимо отбросить. Все значения углов являются действительными числами и выражены в радианах.
Тест для получения сертификата
Если вы впервые проходите тестирование на платформе Этюд по ссылке из Engee, то, нажав на ссылку ниже, вы увидите следующее диалоговое окно:
Нажмите на кнопку "Предоставить", чтобы авторизоваться на платформе Этюд с данными вашего профиля Engee ID.
Если вы раньше уже проходили тестирование по ссылке из Engee, то ваша авторизация выполнится автоматически и тестирование начнется сразу же после нажатия на ссылку.